﻿using System;
using System.Windows.Forms;
using Library;

namespace Directory
{
  /// <summary>
  /// メイン画面のフォームです。
  /// </summary>
  internal sealed partial class Main : Form
  {
    #region パブリックコンストラクター
    /// <summary>
    /// Main クラスの新しいインスタンスを初期化します。
    /// </summary>
    public Main()
    {
      InitializeComponent();

      this.ShowStatusBarText();   //ステータスバーにテキストを表示
      if (DirectoryAccess.CanConnectDomain == false)  //ドメインに接続できない時
      {
        this.DisableControls();   //ドメイン専用のコントロールを無効にする
      }
    }
    #endregion

    #region イベントハンドラ
    private void Button1_Click(object sender, EventArgs e)
    {
      this.Button1.Enabled = false;
      this.ShowListForm();  //リストフォームを表示
      this.Button1.Enabled = true;
    }

    private void Button2_Click(object sender, EventArgs e)
    {
      this.Button2.Enabled = false;
      using (var domain = DirectoryAccess.GetDomain())  //ドメインを取得
      {
        using (var fm = new DomainInfo(domain))
        {
          fm.ShowDialog(this);
        }
      }
      this.Button2.Enabled = true;
    }
    #endregion

    #region プライベートメソッド
    /// <summary>
    /// ステータスバーにテキストを表示します。
    /// </summary>
    private void ShowStatusBarText()
    {
      try
      {
        if (DirectoryAccess.IsLogonDomain)
        {
          this.StatusLabel.Text = String.Format("ドメイン '{0}' にログオンしています。", DirectoryAccess.DomainName);
        }
        else
        {
          if (DirectoryAccess.CanConnectDomain)
          {
            this.StatusLabel.Text = "ローカルログオンしています。（ドメインアクセス可）";
          }
          else
          {
            this.StatusLabel.Text = "ローカルログオンしています。";
          }
        }
      }
      catch
      {
        this.StatusLabel.Text = "ドメインに接続できませんでした。";
        this.Enabled = false;
      }
    }

    /// <summary>
    /// ドメイン専用のコントロールを無効にします。
    /// </summary>
    private void DisableControls()
    {
      this.rb_computer.Enabled = false;
      this.rb_ou.Enabled = false;
      this.rb_printer.Enabled = false;
      this.rb_volume.Enabled = false;
      this.Button2.Enabled = false;
    }

    /// <summary>
    /// リストフォームを表示します。
    /// </summary>
    private void ShowListForm()
    {
      if (this.rb_user.Checked)
      {
        using (var fm = new UserList())
        {
          fm.ShowDialog(this);
        }
        return;
      }

      if (this.rb_group.Checked)
      {
        using (var fm = new GroupList())
        {
          fm.ShowDialog(this);
        }
        return;
      }

      if (this.rb_computer.Checked)
      {
        using (var fm = new ComputerList())
        {
          fm.ShowDialog(this);
        }
        return;
      }

      if (this.rb_ou.Checked)
      {
        using (var fm = new OUList())
        {
          fm.ShowDialog(this);
        }
        return;
      }

      if (this.rb_printer.Checked)
      {
        using (var fm = new PrinterList())
        {
          fm.ShowDialog(this);
        }
        return;
      }

      if (this.rb_volume.Checked)
      {
        using (var fm = new VolumeList())
        {
          fm.ShowDialog(this);
        }
      }
    }
    #endregion
  }
}
